package midend.IR_Instruction;

import midend.IR_Type.IR_Pointer;
import midend.IR_Type.IR_Type;
import midend.IR_Value.IR_BaseBlock;
import midend.IR_Value.IR_Local_Value;
import midend.IR_Value.IR_Value;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;

//Alloc 函数是为某个变量分配空间
public class Alloc_Instrction extends Instruction{

    public Alloc_Instrction(List<IR_Value> op, IR_BaseBlock bb) {
        super(op, bb);
    }

    public String toString(){
        return get_op().get(0).get_ValueName() + " = alloca " + ((IR_Pointer)(get_op().get(0).get_Type())).get_Base_Type().get_TypeName();
    }

    public String get_op_Name(){
        return get_op().get(0).get_ValueName();
    }

    public IR_Type get_op_Type(){
        return get_op().get(0).get_Type();
    }


    @Override
    public Alloc_Instrction clone(IR_BaseBlock block) {
        ArrayList<IR_Value> copy_ops = new ArrayList<>();
        String copy_name = ((IR_Local_Value) get_op().get(0)).get_Local_Identity();
        IR_Type copy_type = get_op().get(0).get_Type();
        IR_Value res = new IR_Local_Value(copy_name, copy_type);
        copy_ops.add(res);
        Alloc_Instrction copy = new Alloc_Instrction(copy_ops, block);
        return copy;
    }

}
